跳到主要内容

JZ45 扑克牌顺子

面试出了原题,太紧张居然不知道怎么搞了,,,,

https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4

第一次解:

这题有两个核心条件 1、除了 0 没有重复文件 2、max - min < 5 (因为数组最大长度才 5)

public class Solution {
public boolean IsContinuous(int [] numbers) {
if(numbers.length != 5) return false;
int min = 14;
int max = -1;
int flag = 0;

for(int i = 0; i < numbers.length; i++) {
int number = numbers[i];
// 健壮性判断
if(number < 0 || number > 13) return false;

if(number == 0) continue;

// 如果第 number 已经为 1 则表示当前已经存在这个值了
if(((flag >> number) & 1) == 1) return false;
// 令 flag 第 number 位为 1
flag |= (1 << number);

// 分别找最大值最小值
if(number > max) max = number;
if(number < min) min = number;

if(max - min >= 5) return false;
}
return true;
}
}

总结:以后遇到判断是否重复就可以使用位操作,遇到比对是否连续就可以比对差值